﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL.Entities;
using BAL;
using System.Configuration;
using System.Globalization;

namespace GrouponDesktop.RegistroConsumoCupon
{
    public partial class RegistroConsumoCuponFrm : Form
    {
        private ProveedorEntity _proveedor;
        private ProveedorBAL _proveeBAL;

        public RegistroConsumoCuponFrm(UsuarioEntity usuario)
        {
            InitializeComponent();
            this.CancelButton = this.btnSalir;
            this._proveeBAL = new ProveedorBAL();

            this._proveedor = this._proveeBAL.GetProveedorByUserId(usuario.IntIdUsuario);

            this.lblFechaActual.Text = ConfigurationSettings.AppSettings["actualDate"].ToString();
            this.lblUsuario.Text += usuario.VarUsername;

            this.CargarGrillaCupones();
        }

        private void CargarGrillaCupones()
        {
            try
            {
                CuponBAL cuponBal = new CuponBAL();
                List<CuponEntity> cupones = cuponBal.GetCuponesProveedorEntregados(this._proveedor.IntIdProveedor);

                DataTable dt = this.CrearDataTableCuponesEntregados(cupones);

                this.dgCupones.DataSource = dt;

                this.ConfigurarDataGridCuponesEntregados();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error: " + ex.Message, "Registro Consumo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private DataTable CrearDataTableCuponesEntregados(List<CuponEntity> cupones)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("FechaCompra", typeof(DateTime));
            dt.Columns.Add("Codigo", typeof(string));
            dt.Columns.Add("Precio", typeof(string));
            dt.Columns.Add("Descripcion", typeof(string));
            dt.Columns.Add("IdCompra", typeof(int));
            dt.Columns.Add("VencimientoFecha", typeof(DateTime));

            foreach (CuponEntity cupon in cupones)
            {
                dt.Rows.Add(cupon.FechaCompra, cupon.CodigoCupon, "$" + cupon.DetalleCupon.Precio.ToString(), cupon.DetalleCupon.Descripcion, cupon.IdCompra, cupon.VencConsumoFecha);
            }

            return dt;
        }

        private void ConfigurarDataGridCuponesEntregados()
        {
            this.dgCupones.BorderStyle = BorderStyle.FixedSingle;
            this.dgCupones.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
            this.dgCupones.RowHeadersVisible = false;
            this.dgCupones.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.dgCupones.MultiSelect = false;
            this.dgCupones.RowTemplate.Resizable = DataGridViewTriState.False;
            this.dgCupones.AllowUserToAddRows = false;
            this.dgCupones.RowTemplate.Height = 20;
            this.dgCupones.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;

            this.dgCupones.Columns["IdCompra"].Visible = false;
            this.dgCupones.Columns["VencimientoFecha"].Visible = false;

            this.dgCupones.Columns["FechaCompra"].Width = 70;
            this.dgCupones.Columns["Codigo"].Width = 95;
            this.dgCupones.Columns["Precio"].Width = 40;
            this.dgCupones.Columns["Descripcion"].Width = 350;
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnEntregado_Click(object sender, EventArgs e)
        {
            if (this.dgCupones.SelectedRows != null)
            {
                DataGridViewRow rw = this.dgCupones.SelectedRows[0];

                CuponEntity cupon = this.ArmarCupon(rw);

                try
                {
                    DateTime fechaActual = DateTime.Parse(this.lblFechaActual.Text);

                    if (cupon.VencConsumoFecha >= fechaActual)
                    {
                        this._proveeBAL.CanjearCupon(fechaActual, cupon.IdCompra);

                        MessageBox.Show(string.Format("Se registro el conje del cupon {0}", cupon.CodigoCupon), "Registro Consumo", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        this.dgCupones.Rows.Remove(rw);
                    }
                    else
                    {
                        MessageBox.Show("El cupon ha expirado", "Registro Consumo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ha ocurrido un error: " + ex.Message, "Registro Consumo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private CuponEntity ArmarCupon(DataGridViewRow row)
        {
            CuponEntity cupon = new CuponEntity();

            cupon.VencConsumoFecha = (DateTime)row.Cells["VencimientoFecha"].Value;
            cupon.IdCompra = Convert.ToInt32(row.Cells["IdCompra"].Value);
            cupon.CodigoCupon = row.Cells["Codigo"].Value.ToString();

            return cupon;
        }
    }
}
